package cn.gov.pbc.gd.credit.center.service.util;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;  
  
public class HttpInvoker {  
  
  
    public static void readContentFromGet(String url, String data) throws IOException {  
        // 拼凑get请求的URL字串，使用URLEncoder.encode对特殊和不可见字符进行编码  
        String getURL = url + " ?" + data;  
        URL getUrl = new URL(getURL);  
        // 根据拼凑的URL，打开连接，URL.openConnection函数会根据 URL的类型，  
        // 返回不同的URLConnection子类的对象，这里URL是一个http，因此实际返回的是HttpURLConnection  
        HttpURLConnection connection = (HttpURLConnection) getUrl  
                .openConnection();  
        // 进行连接，但是实际上get request要在下一句的 connection.getInputStream()函数中才会真正发到  
        // 服务器  
        connection.connect();  
        // 取得输入流，并使用Reader读取  
        BufferedReader reader = new BufferedReader(new InputStreamReader(  
                connection.getInputStream()));  
        System.out.println(" ============================= ");  
        System.out.println(" Contents of get request ");  
        System.out.println(" ============================= ");  
        String lines;  
        while ((lines = reader.readLine()) != null) {  
            System.out.println(lines);  
        }  
        reader.close();  
        // 断开连接  
        connection.disconnect();  
        System.out.println(" ============================= ");  
        System.out.println(" Contents of get request ends ");  
        System.out.println(" ============================= ");  
    }  
  
    public static String readContentFromPost(String url, String data, String charset, String cookies) throws IOException {  
        // Post请求的url，与get不同的是不需要带参数  
        URL postUrl = new URL(url);  
        // 打开连接  
        HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();  
        // Output to the connection. Default is  
        // false, set to true because post  
        // method must write something to the  
        // connection  
        // 设置是否向connection输出，因为这个是post请求，参数要放在  
        // http正文内，因此需要设为true  
        connection.setDoOutput(true);  
        // Read from the connection. Default is true.  
        connection.setDoInput(true);  
        // Set the post method. Default is GET  
        connection.setRequestMethod("POST");  
        // Post cannot use caches  
        // Post 请求不能使用缓存  
        connection.setUseCaches(false);  
        // This method takes effects to  every instances of this class.  
        // URLConnection.setFollowRedirects是static 函数，作用于所有的URLConnection对象。  
        // connection.setFollowRedirects(true);  
  
        // This methods only takes effacts to this  instance.  
        // URLConnection.setInstanceFollowRedirects 是成员函数，仅作用于当前函数  
        connection.setInstanceFollowRedirects(true);  
        // Set the content type to urlencoded,  
        // because we will write some URL-encoded content to the  connection. Settings above must be set before connect!  
        // 配置本次连接的Content-type，配置为application/x- www-form-urlencoded的  
        // 意思是正文是urlencoded编码过的form参数，下面我们可以看到我们对正文内容使用URLEncoder.encode  
        // 进行编码  
 
        connection.setRequestProperty("Accept", "*/*");
        connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
        connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6");
        connection.setRequestProperty("Connection", "keep-alive");
       // connection.setRequestProperty("Content-Length", "153");
        connection.setRequestProperty("Content-Type",  "application/x-www-form-urlencoded; charset=" + charset);
//        connection.setRequestProperty("cookie", "Hm_lvt_692544717e4ca5489bff77b2e9b28e7b=1449645321; Hm_lpvt_692544717e4ca5489bff77b2e9b28e7b=1449645391; __jsluid=8c1e0374852916bf96a7f809c2aee3c8; _gscu_482111853=49645323pc25ob94; _gscbrs_482111853=1; ASP.NET_SessionId=m44tcmadhujdeijinvbiecnw; __jsl_clearance=1450332415.032|0|t2eMmMeGhHeoINln2hPaPf4D5HI%3D; _gscu_1241932522=50249161sf1y6f54; _gscs_1241932522=t50334524zs7d8g57|pv:1; _gscbrs_1241932522=1");
        connection.setRequestProperty("cookie", cookies);
        //connection.setRequestProperty("Referer","http://11.201.249.1:7001/branchquery/changepasswordauth.jsp");
        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36");
        connection.setRequestProperty("X-Requested-With","XMLHttpRequest");
        
        // 连接，从postUrl.openConnection()至此的配置必须要在 connect之前完成，  
        // 要注意的是connection.getOutputStream会隐含的进行 connect。  
        connection.connect();  
        DataOutputStream out = new DataOutputStream(connection.getOutputStream());  

        //String content = "passwordflag=1&oldpassword=csmm12345&newpassword=csmm123456&newpasswordvalid=csmm123456&B1=%CC%E1++%BD%BB";
//        String content = "Param="  
//                + URLEncoder.encode("案件类型:刑事案件 ", "utf-8"); 
        // DataOutputStream.writeBytes将字符串中的16位的 unicode字符以8位的字符形式写道流里面  
        out.writeBytes(data);  
  
        out.flush();  
        out.close(); // flush and close  
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), charset));  
        String resData = "";
        String line;  
        while ((line = reader.readLine()) != null) {  
        	resData += line;
        }  
        reader.close();  
        connection.disconnect();  
        
        return resData;
    }  
    
  
    /** */  
    /** 
     * @param args 
     * @throws IOException 
     */  
    public static void main(String[] args) throws IOException {  
    	readContentFromPost("", "", "GBK", "");
    }  
  
}